{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] \n",
    "plt.rcParams['font.family']='sans-serif'\n",
    "import pandas as pd\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 决策树"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>色泽</th>\n",
       "      <th>根蒂</th>\n",
       "      <th>敲击</th>\n",
       "      <th>纹理</th>\n",
       "      <th>脐部</th>\n",
       "      <th>触感</th>\n",
       "      <th>密度</th>\n",
       "      <th>含糖率</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>青绿</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>浊响</td>\n",
       "      <td>清晰</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>0.697</td>\n",
       "      <td>0.460</td>\n",
       "      <td>好瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>乌黑</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>沉闷</td>\n",
       "      <td>清晰</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>0.774</td>\n",
       "      <td>0.376</td>\n",
       "      <td>好瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>乌黑</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>浊响</td>\n",
       "      <td>清晰</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>0.634</td>\n",
       "      <td>0.264</td>\n",
       "      <td>好瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>青绿</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>沉闷</td>\n",
       "      <td>清晰</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>0.608</td>\n",
       "      <td>0.318</td>\n",
       "      <td>好瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>浅白</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>浊响</td>\n",
       "      <td>清晰</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>0.556</td>\n",
       "      <td>0.215</td>\n",
       "      <td>好瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>青绿</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>浊响</td>\n",
       "      <td>清晰</td>\n",
       "      <td>稍凹</td>\n",
       "      <td>软粘</td>\n",
       "      <td>0.403</td>\n",
       "      <td>0.237</td>\n",
       "      <td>好瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>乌黑</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>浊响</td>\n",
       "      <td>稍糊</td>\n",
       "      <td>稍凹</td>\n",
       "      <td>软粘</td>\n",
       "      <td>0.481</td>\n",
       "      <td>0.149</td>\n",
       "      <td>好瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>乌黑</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>浊响</td>\n",
       "      <td>清晰</td>\n",
       "      <td>稍凹</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>0.437</td>\n",
       "      <td>0.211</td>\n",
       "      <td>好瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>乌黑</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>沉闷</td>\n",
       "      <td>稍糊</td>\n",
       "      <td>稍凹</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>0.666</td>\n",
       "      <td>0.091</td>\n",
       "      <td>坏瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>青绿</td>\n",
       "      <td>硬挺</td>\n",
       "      <td>清脆</td>\n",
       "      <td>清晰</td>\n",
       "      <td>平坦</td>\n",
       "      <td>软粘</td>\n",
       "      <td>0.243</td>\n",
       "      <td>0.267</td>\n",
       "      <td>坏瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>浅白</td>\n",
       "      <td>硬挺</td>\n",
       "      <td>清脆</td>\n",
       "      <td>模糊</td>\n",
       "      <td>平坦</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>0.245</td>\n",
       "      <td>0.057</td>\n",
       "      <td>坏瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>浅白</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>浊响</td>\n",
       "      <td>模糊</td>\n",
       "      <td>平坦</td>\n",
       "      <td>软粘</td>\n",
       "      <td>0.343</td>\n",
       "      <td>0.099</td>\n",
       "      <td>坏瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>青绿</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>浊响</td>\n",
       "      <td>稍糊</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>0.639</td>\n",
       "      <td>0.161</td>\n",
       "      <td>坏瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>浅白</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>沉闷</td>\n",
       "      <td>稍糊</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>0.657</td>\n",
       "      <td>0.198</td>\n",
       "      <td>坏瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>乌黑</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>浊响</td>\n",
       "      <td>清晰</td>\n",
       "      <td>稍凹</td>\n",
       "      <td>软粘</td>\n",
       "      <td>0.360</td>\n",
       "      <td>0.370</td>\n",
       "      <td>坏瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>浅白</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>浊响</td>\n",
       "      <td>模糊</td>\n",
       "      <td>平坦</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>0.593</td>\n",
       "      <td>0.042</td>\n",
       "      <td>坏瓜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>青绿</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>沉闷</td>\n",
       "      <td>稍糊</td>\n",
       "      <td>稍凹</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>0.719</td>\n",
       "      <td>0.103</td>\n",
       "      <td>坏瓜</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    色泽  根蒂  敲击  纹理  脐部  触感     密度    含糖率 label\n",
       "0   青绿  蜷缩  浊响  清晰  凹陷  硬滑  0.697  0.460    好瓜\n",
       "1   乌黑  蜷缩  沉闷  清晰  凹陷  硬滑  0.774  0.376    好瓜\n",
       "2   乌黑  蜷缩  浊响  清晰  凹陷  硬滑  0.634  0.264    好瓜\n",
       "3   青绿  蜷缩  沉闷  清晰  凹陷  硬滑  0.608  0.318    好瓜\n",
       "4   浅白  蜷缩  浊响  清晰  凹陷  硬滑  0.556  0.215    好瓜\n",
       "5   青绿  稍蜷  浊响  清晰  稍凹  软粘  0.403  0.237    好瓜\n",
       "6   乌黑  稍蜷  浊响  稍糊  稍凹  软粘  0.481  0.149    好瓜\n",
       "7   乌黑  稍蜷  浊响  清晰  稍凹  硬滑  0.437  0.211    好瓜\n",
       "8   乌黑  稍蜷  沉闷  稍糊  稍凹  硬滑  0.666  0.091    坏瓜\n",
       "9   青绿  硬挺  清脆  清晰  平坦  软粘  0.243  0.267    坏瓜\n",
       "10  浅白  硬挺  清脆  模糊  平坦  硬滑  0.245  0.057    坏瓜\n",
       "11  浅白  蜷缩  浊响  模糊  平坦  软粘  0.343  0.099    坏瓜\n",
       "12  青绿  稍蜷  浊响  稍糊  凹陷  硬滑  0.639  0.161    坏瓜\n",
       "13  浅白  稍蜷  沉闷  稍糊  凹陷  硬滑  0.657  0.198    坏瓜\n",
       "14  乌黑  稍蜷  浊响  清晰  稍凹  软粘  0.360  0.370    坏瓜\n",
       "15  浅白  蜷缩  浊响  模糊  平坦  硬滑  0.593  0.042    坏瓜\n",
       "16  青绿  蜷缩  沉闷  稍糊  稍凹  硬滑  0.719  0.103    坏瓜"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv('./watermalon3/watermalon3.csv')\n",
    "#data.iloc[:,-1] = data.iloc[:,-1].apply(lambda x : 1.0 if x == data.iloc[:,-1][0] else 0.0)\n",
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_train = pd.read_csv('./watermalon2/data2.0train.csv').iloc[:,1:]\n",
    "data_test = pd.read_csv('./watermalon2/data2.0cv.csv').iloc[:,1:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>色泽</th>\n",
       "      <th>根蒂</th>\n",
       "      <th>敲声</th>\n",
       "      <th>纹理</th>\n",
       "      <th>脐部</th>\n",
       "      <th>触感</th>\n",
       "      <th>好瓜</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>青绿</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>浊响</td>\n",
       "      <td>清晰</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>乌黑</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>沉闷</td>\n",
       "      <td>清晰</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>乌黑</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>浊响</td>\n",
       "      <td>清晰</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>青绿</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>浊响</td>\n",
       "      <td>清晰</td>\n",
       "      <td>稍凹</td>\n",
       "      <td>软粘</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>乌黑</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>浊响</td>\n",
       "      <td>稍糊</td>\n",
       "      <td>稍凹</td>\n",
       "      <td>软粘</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>青绿</td>\n",
       "      <td>硬挺</td>\n",
       "      <td>清脆</td>\n",
       "      <td>清晰</td>\n",
       "      <td>平坦</td>\n",
       "      <td>软粘</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>浅白</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>沉闷</td>\n",
       "      <td>稍糊</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>乌黑</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>浊响</td>\n",
       "      <td>清晰</td>\n",
       "      <td>稍凹</td>\n",
       "      <td>软粘</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>浅白</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>浊响</td>\n",
       "      <td>模糊</td>\n",
       "      <td>平坦</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>青绿</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>沉闷</td>\n",
       "      <td>稍糊</td>\n",
       "      <td>稍凹</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   色泽  根蒂  敲声  纹理  脐部  触感 好瓜\n",
       "0  青绿  蜷缩  浊响  清晰  凹陷  硬滑  是\n",
       "1  乌黑  蜷缩  沉闷  清晰  凹陷  硬滑  是\n",
       "2  乌黑  蜷缩  浊响  清晰  凹陷  硬滑  是\n",
       "3  青绿  稍蜷  浊响  清晰  稍凹  软粘  是\n",
       "4  乌黑  稍蜷  浊响  稍糊  稍凹  软粘  是\n",
       "5  青绿  硬挺  清脆  清晰  平坦  软粘  否\n",
       "6  浅白  稍蜷  沉闷  稍糊  凹陷  硬滑  否\n",
       "7  乌黑  稍蜷  浊响  清晰  稍凹  软粘  否\n",
       "8  浅白  蜷缩  浊响  模糊  平坦  硬滑  否\n",
       "9  青绿  蜷缩  沉闷  稍糊  稍凹  硬滑  否"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>色泽</th>\n",
       "      <th>根蒂</th>\n",
       "      <th>敲声</th>\n",
       "      <th>纹理</th>\n",
       "      <th>脐部</th>\n",
       "      <th>触感</th>\n",
       "      <th>好瓜</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>青绿</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>沉闷</td>\n",
       "      <td>清晰</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>浅白</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>浊响</td>\n",
       "      <td>清晰</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>乌黑</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>浊响</td>\n",
       "      <td>清晰</td>\n",
       "      <td>稍凹</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>乌黑</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>沉闷</td>\n",
       "      <td>稍糊</td>\n",
       "      <td>稍凹</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>浅白</td>\n",
       "      <td>硬挺</td>\n",
       "      <td>清脆</td>\n",
       "      <td>模糊</td>\n",
       "      <td>平坦</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>浅白</td>\n",
       "      <td>蜷缩</td>\n",
       "      <td>浊响</td>\n",
       "      <td>模糊</td>\n",
       "      <td>平坦</td>\n",
       "      <td>软粘</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>青绿</td>\n",
       "      <td>稍蜷</td>\n",
       "      <td>浊响</td>\n",
       "      <td>稍糊</td>\n",
       "      <td>凹陷</td>\n",
       "      <td>硬滑</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   色泽  根蒂  敲声  纹理  脐部  触感 好瓜\n",
       "0  青绿  蜷缩  沉闷  清晰  凹陷  硬滑  是\n",
       "1  浅白  蜷缩  浊响  清晰  凹陷  硬滑  是\n",
       "2  乌黑  稍蜷  浊响  清晰  稍凹  硬滑  是\n",
       "3  乌黑  稍蜷  沉闷  稍糊  稍凹  硬滑  否\n",
       "4  浅白  硬挺  清脆  模糊  平坦  硬滑  否\n",
       "5  浅白  蜷缩  浊响  模糊  平坦  软粘  否\n",
       "6  青绿  稍蜷  浊响  稍糊  凹陷  硬滑  否"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_test"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 连续值处理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 二分法选择最佳划分点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算信息熵\n",
    "def Ent(dataSet):\n",
    "    classes = dataSet.iloc[:,-1].value_counts()\n",
    "    # 获取每个类的实例数\n",
    "    num_k = classes.values\n",
    "    # 获取类数\n",
    "    k = len(classes)\n",
    "    # 计算信息熵\n",
    "    ent = 0\n",
    "    for i in range(k):\n",
    "        p_i = num_k[i]*1.0/len(dataSet.values)\n",
    "        ent += p_i*np.log2(p_i)\n",
    "    return -ent"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def best_division(dataSet, attr):\n",
    "    gain = []\n",
    "    sort = np.sort(dataSet[attr])\n",
    "    T = [(sort[i]+sort[i+1])*1.0/2 for i in range(len(dataSet)-1)]\n",
    "    for t in T:\n",
    "        s = 0\n",
    "        s += len(dataSet[dataSet[attr]<=t])*1.0/len(dataSet)*Ent(dataSet[dataSet[attr]<=t])\n",
    "        s += len(dataSet[dataSet[attr]>t])*1.0/len(dataSet)*Ent(dataSet[dataSet[attr]>t])\n",
    "        gain.append(Ent(dataSet)-s)\n",
    "    return np.max(np.array(gain)), T[np.argmax(np.array(gain))]\n",
    "\n",
    "a,b = best_division(data, '密度')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 划分方式"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 信息熵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'色泽'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def info_ent(dataSet, attrs):\n",
    "    # 计算信息熵\n",
    "    def Ent(dataSet):\n",
    "        classes = dataSet.iloc[:,-1].value_counts()\n",
    "        # 获取每个类的实例数\n",
    "        num_k = classes.values\n",
    "        # 获取类数\n",
    "        k = len(classes)\n",
    "        # 计算信息熵\n",
    "        ent = 0\n",
    "        for i in range(k):\n",
    "            p_i = num_k[i]*1.0/len(dataSet.values)\n",
    "            ent += p_i*np.log2(p_i)\n",
    "        return -ent\n",
    "    \n",
    "    ents = []\n",
    "    for a in attrs:\n",
    "        values = dataSet[a].value_counts().index\n",
    "        s = 0\n",
    "        for v in values:\n",
    "            s += Ent(dataSet[dataSet[a]==v])\n",
    "        ents.append(s)\n",
    "    ents = np.array(ents)\n",
    "    \n",
    "    return np.random.choice(attrs[ents==np.min(ents)])\n",
    "    \n",
    "info_ent(data_train, data_train.columns[:-1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 信息增益"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'脐部'"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def info_gain(dataSet, attrs):\n",
    "    # 计算信息熵\n",
    "    def Ent(dataSet):\n",
    "        classes = dataSet.iloc[:,-1].value_counts()\n",
    "        # 获取每个类的实例数\n",
    "        num_k = classes.values\n",
    "        # 获取类数\n",
    "        k = len(classes)\n",
    "        # 计算信息熵\n",
    "        ent = 0\n",
    "        for i in range(k):\n",
    "            p_i = num_k[i]*1.0/len(dataSet.values)\n",
    "            ent += p_i*np.log2(p_i)\n",
    "        return -ent\n",
    "\n",
    "    # 计算信息增益\n",
    "    def Gain(dataSet, attr):\n",
    "        values = dataSet[attr].value_counts().index\n",
    "        s = 0\n",
    "        for i in range(len(values)):\n",
    "            tmp = dataSet[dataSet[attr]==values[i]]\n",
    "            s += len(tmp)*1.0/len(dataSet)*Ent(tmp)\n",
    "        return Ent(dataSet)-s\n",
    "    \n",
    "    # 找最大值\n",
    "    gain = []\n",
    "    for i in range(len(attrs)):\n",
    "        gain.append(Gain(dataSet, attrs[i]))\n",
    "    gain = np.array(gain)\n",
    "    \n",
    "    return np.random.choice(attrs[gain==np.max(gain)])\n",
    "\n",
    "\n",
    "\n",
    "info_gain(data_train, data_train.columns[:-1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 增益率（识别并处理缺失值与连续值）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "('纹理', 0)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "missing_sign = '?'\n",
    "\n",
    "# 可以处理连续变量\n",
    "def gain_ratio(dataSet, attrs):\n",
    "    # 计算信息熵\n",
    "    def Ent(dataSet):\n",
    "        classes = dataSet.iloc[:,-1].value_counts()\n",
    "        # 获取每个类的实例数\n",
    "        num_k = classes.values\n",
    "        # 获取类数\n",
    "        k = len(classes)\n",
    "        # 计算信息熵\n",
    "        ent = 0\n",
    "        for i in range(k):\n",
    "            p_i = num_k[i]*1.0/len(dataSet.values)\n",
    "            ent += p_i*np.log2(p_i)\n",
    "        return -ent\n",
    "\n",
    "    # 计算信息增益和IV值\n",
    "    def Gain_IV(dataSet, attr):\n",
    "        values = dataSet[attr].value_counts().index\n",
    "        s = 0\n",
    "        iv = 0\n",
    "        for i in range(len(values)):\n",
    "            dataSet[dataSet[attr]==values[i]]\n",
    "            tmp = len(dataSet[dataSet[attr]==values[i]])*1.0/len(dataSet)\n",
    "            s += tmp*Ent(dataSet[dataSet[attr]==values[i]])\n",
    "            iv -= tmp*np.log2(tmp)\n",
    "        return (Ent(dataSet)-s), iv\n",
    "    \n",
    "    def is_consequent(dataSet, attr):\n",
    "        if (isinstance(dataSet[attr].iloc[0], float) \n",
    "        or isinstance(dataSet[attr].iloc[0], int) \n",
    "        and abs(len(dataSet)-len(dataSet[attr].value_counts()))<=2):\n",
    "            return True\n",
    "        else:\n",
    "            return False\n",
    "    \n",
    "    def best_division(dataSet, attr):\n",
    "        gain = []\n",
    "        sort = np.sort(dataSet[attr])\n",
    "        T = [(sort[i]+sort[i+1])*1.0/2 for i in range(len(dataSet)-1)]\n",
    "        for t in T:\n",
    "            s = 0\n",
    "            iv = 0\n",
    "            s += len(dataSet[dataSet[attr]<=t])*1.0/len(dataSet)*Ent(dataSet[dataSet[attr]<=t])\n",
    "            iv -= len(dataSet[dataSet[attr]<=t])*1.0/len(dataSet)*np.log2(len(dataSet[dataSet[attr]<=t])*1.0/len(dataSet))\n",
    "            s += len(dataSet[dataSet[attr]>t])*1.0/len(dataSet)*Ent(dataSet[dataSet[attr]>t])\n",
    "            iv -= len(dataSet[dataSet[attr]>t])*1.0/len(dataSet)*np.log2(len(dataSet[dataSet[attr]>t])*1.0/len(dataSet))\n",
    "            gain.append(Ent(dataSet)-s)\n",
    "        return np.max(np.array(gain)), iv, T[np.argmax(np.array(gain))]\n",
    "    \n",
    "    # 启发式搜索最大值\n",
    "    consequent_attrs = {}\n",
    "    gain = []\n",
    "    gain_r = []\n",
    "    for i in range(len(attrs)):\n",
    "        if is_consequent(dataSet, attrs[i]):\n",
    "            gain_, iv, t = best_division(dataSet, attrs[i])\n",
    "            consequent_attrs[attrs[i]] = t\n",
    "        else:\n",
    "            gain_, iv = Gain_IV(dataSet, attrs[i])\n",
    "        gain.append(gain_)\n",
    "        gain_r.append(gain_/iv)\n",
    "    gain = pd.Series(gain)\n",
    "    gain_avg = gain[gain>np.average(gain)]\n",
    "    ind = (gain_avg==np.max(gain_avg))[(gain_avg==np.max(gain_avg))==True].index\n",
    "    best_attr = np.random.choice(np.array(attrs)[ind])\n",
    "    if best_attr in consequent_attrs.keys():\n",
    "        return best_attr, consequent_attrs[best_attr]\n",
    "    else: \n",
    "        return best_attr, 0\n",
    "\n",
    "gain_ratio(data, data.columns[:-1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基尼指数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'色泽'"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def gini_index(dataSet, attrs):\n",
    "    # 计算数据集的基尼指数\n",
    "    def Gini(dataSet):\n",
    "        classes = dataSet.iloc[:,-1].value_counts()\n",
    "        # 获取每个类的实例数\n",
    "        num_k = classes.values\n",
    "        # 获取类数\n",
    "        k = len(classes)\n",
    "        gini = 0\n",
    "        for i in range(k):\n",
    "            gini += (num_k[i]/len(dataSet))**2\n",
    "        return 1 - gini\n",
    "\n",
    "    # 计算数据集属性的基尼指数\n",
    "    def Gini_index(dataSet, attr):\n",
    "        values = dataSet[attr].value_counts().index\n",
    "        s = 0\n",
    "        for i in range(len(values)):\n",
    "            dataSet[dataSet[attr]==values[i]]\n",
    "            tmp = len(dataSet[dataSet[attr]==values[i]])\n",
    "            s += tmp*1.0/len(dataSet)*Gini(dataSet[dataSet[attr]==values[i]])\n",
    "        return s\n",
    "    \n",
    "    gini = []\n",
    "    for i in range(len(attrs)):\n",
    "        gini.append(Gini_index(dataSet, attrs[i]))\n",
    "    gini = pd.Series(gini)\n",
    "    \n",
    "    return np.random.choice(attrs[gini==np.min(gini)])\n",
    "    \n",
    "gini_index(data_train, data_train.columns[:-1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 生成决策树"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def GenerateDecisionTree(dataSet, attrs, method='c4.5'):\n",
    "    attrs = np.array(attrs)\n",
    "    \n",
    "    # 获取类\n",
    "    classes = dataSet.iloc[:,-1].value_counts().index\n",
    "    \n",
    "    # 类别数\n",
    "    k = len(dataSet.iloc[:,-1].value_counts())\n",
    "    \n",
    "    # 若数据集中只有一类样本，不划分，则返回其类\n",
    "    if k==1:\n",
    "        return classes[0]\n",
    "    \n",
    "    # 若当前属性集为空或所有样本在所有属性上的取值相同，不划分，返回样本数最多的类\n",
    "    if len(attrs)==0 or len(data.iloc[:,:-1].drop_duplicates())==1:\n",
    "        return dataSet.iloc[:,-1].value_counts().idxmax()\n",
    "\n",
    "    # 从属性集中选取最优属性\n",
    "    if method=='id3':\n",
    "        best_attr = info_gain(dataSet, attrs)\n",
    "    elif method=='c4.5':\n",
    "        best_attr, t = gain_ratio(dataSet, attrs)\n",
    "    elif method=='cart':\n",
    "        best_attr = gini_index(dataSet, attrs)\n",
    "    else:\n",
    "        print('method参数错误，备选方案：【id3, c4,5, cart】')\n",
    "        return\n",
    "    \n",
    "    # 初始化结点node\n",
    "    node = {best_attr: {}}\n",
    "    # 对于每个离散属性生成分支\n",
    "    if t==0:\n",
    "        for a in dataSet[best_attr].value_counts().index:\n",
    "            d_v = dataSet[dataSet[best_attr]==a]\n",
    "            if len(d_v)==0:\n",
    "                node[best_attr][a] = dataSet.iloc[:,-1].value_counts().idxmax()\n",
    "                return node\n",
    "            else:\n",
    "                ind = np.argwhere(attrs==best_attr)\n",
    "                new_attrs = np.delete(attrs, ind)\n",
    "                node[best_attr][a] = GenerateDecisionTree(d_v, new_attrs, method=method)\n",
    "                #print(node)\n",
    "    else:\n",
    "        tmp = dataSet[best_attr].apply(lambda x:\"是\" if x<=t else \"否\")\n",
    "        for a in tmp.value_counts().index:\n",
    "\n",
    "            d_v = dataSet[tmp==a]\n",
    "\n",
    "            tmp_attr = best_attr+\"<=%.3f\"%t\n",
    "            if len(d_v)==0:\n",
    "                node[tmp_attr][a] = dataSet.iloc[:,-1].value_counts().idxmax()\n",
    "                return node\n",
    "            else:\n",
    "                ind = np.argwhere(attrs==best_attr)\n",
    "                new_attrs = np.delete(attrs, ind)\n",
    "                if tmp_attr not in node.keys():\n",
    "                    node[tmp_attr] = node.pop(best_attr)\n",
    "                node[tmp_attr][a] = GenerateDecisionTree(d_v, new_attrs, method=method)\n",
    "                #print(node)\n",
    "        \n",
    "    return node"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 可视化决策树"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 获取树的叶子节点数目\n",
    "def get_num_leafs(decision_tree):\n",
    "    num_leafs = 0\n",
    "    first_str = next(iter(decision_tree))\n",
    "    second_dict = decision_tree[first_str]\n",
    "    for k in second_dict.keys():\n",
    "        if isinstance(second_dict[k], dict):\n",
    "            num_leafs += get_num_leafs(second_dict[k])\n",
    "        else:\n",
    "            num_leafs += 1\n",
    "    return num_leafs\n",
    " \n",
    "# 获取树的深度\n",
    "def get_tree_depth(decision_tree):\n",
    "    max_depth = 0\n",
    "    first_str = next(iter(decision_tree))\n",
    "    second_dict = decision_tree[first_str]\n",
    "    for k in second_dict.keys():\n",
    "        if isinstance(second_dict[k], dict):\n",
    "            this_depth = 1 + get_tree_depth(second_dict[k])\n",
    "        else:\n",
    "            this_depth = 1\n",
    "        if this_depth > max_depth:\n",
    "            max_depth = this_depth\n",
    "    return max_depth\n",
    " \n",
    "# 绘制节点\n",
    "def plot_node(node_txt, center_pt, parent_pt, node_type):\n",
    "    arrow_args = dict(arrowstyle='<-')\n",
    "    create_plot.ax1.annotate(node_txt, xy=parent_pt,  xycoords='axes fraction', xytext=center_pt, \n",
    "                             textcoords='axes fraction', va=\"center\", ha=\"center\", \n",
    "                             bbox=node_type,arrowprops=arrow_args, fontsize=25)\n",
    "\n",
    "# 标注划分属性\n",
    "def plot_mid_text(cntr_pt, parent_pt, txt_str):\n",
    "    x_mid = (parent_pt[0] - cntr_pt[0]) / 2.0 + cntr_pt[0]\n",
    "    y_mid = (parent_pt[1] - cntr_pt[1]) / 2.0 + cntr_pt[1]\n",
    "    create_plot.ax1.text(x_mid, y_mid, txt_str, va=\"center\", ha=\"center\", color='red',fontsize=20)\n",
    "    return\n",
    "\n",
    "\n",
    "\n",
    "# 绘制树\n",
    "def plot_tree(decision_tree, parent_pt, node_txt):\n",
    "    d_node = dict(boxstyle=\"sawtooth\", fc=\"0.8\")\n",
    "    leaf_node = dict(boxstyle=\"round4\", fc='0.8')\n",
    "    num_leafs = get_num_leafs(decision_tree)\n",
    "    first_str = next(iter(decision_tree))\n",
    "    cntr_pt = (plot_tree.xoff + (1.0 +float(num_leafs))/2.0/plot_tree.totalW, plot_tree.yoff)\n",
    "    plot_mid_text(cntr_pt, parent_pt, node_txt)\n",
    "    plot_node(first_str, cntr_pt, parent_pt, d_node)\n",
    "    second_dict = decision_tree[first_str]\n",
    "    plot_tree.yoff = plot_tree.yoff - 1.0/plot_tree.totalD\n",
    "    for k in second_dict.keys():\n",
    "        if isinstance(second_dict[k], dict):\n",
    "            plot_tree(second_dict[k], cntr_pt, k)\n",
    "        else:\n",
    "            plot_tree.xoff = plot_tree.xoff + 1.0/plot_tree.totalW\n",
    "            plot_node(second_dict[k], (plot_tree.xoff, plot_tree.yoff), cntr_pt, leaf_node)\n",
    "            plot_mid_text((plot_tree.xoff, plot_tree.yoff), cntr_pt, k)\n",
    "    plot_tree.yoff = plot_tree.yoff + 1.0/plot_tree.totalD\n",
    "    return\n",
    "\n",
    "def create_plot(dtree):\n",
    "    fig = plt.figure(figsize=(8,8), facecolor='white')\n",
    "    fig.clf()\n",
    "    axprops = dict(xticks=[], yticks=[])\n",
    "    \n",
    "    create_plot.ax1 = plt.subplot(111, frameon=False, **axprops)\n",
    "    plot_tree.totalW = float(get_num_leafs(dtree))\n",
    "    plot_tree.totalD = float(get_tree_depth(dtree))\n",
    "    plot_tree.xoff = -0.5/plot_tree.totalW\n",
    "    plot_tree.yoff = 1.0\n",
    "    plot_tree(dtree, (0.5, 1.0), '')\n",
    "    plt.show()\n",
    "    return\n",
    "\n",
    "tree = GenerateDecisionTree(data, data.columns[:-1], method='c4.5')\n",
    "create_plot(tree)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'色泽': {'乌黑': {'脐部': {'稍凹': {'纹理': {'稍糊': '是', '清晰': '否'}}, '凹陷': '是'}},\n",
       "  '青绿': {'敲声': {'浊响': '是', '沉闷': '否', '清脆': '否'}},\n",
       "  '浅白': '否'}}"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree = GenerateDecisionTree(data_train, data_train.columns[:-1], method='c4.5')\n",
    "tree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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FGL58uW4d+8eAGDTpk0tChjOzs5QKBTIz89X/V62FplMhgcPHjR702591x1gA+b333/fomsQdUYbMNPT0+Hp6alVsASA6OhoSCQSTJs2TavFqF9//XUsX7680a4qhUIBoVDY6HVqa2tVwXTixImquV8//vgj4uPjMWLECEyZMgUAkJeXh8jIyCaz5zp37ozu3bsjPT29yXoYkzt37sDT01Onc5RP/itXrmyNIqFXr174448/WuXaT7tz545OAaO16w6w85kNkWXOMAzu3LmD3r17N+v8+Ph4rF27VrWCEwDV3OS0tDRcv34dM2bMqNdF2RgOh4M+ffrg1q1brR4w7927B3d3d62745/UGnUHgG7duqG4uBhisbjNF7FoL4w2YEZFRWHkyJHYsmULli9f3miXikwmw8GDB2FhYaFazODevXuqCfRjx44Fh8NRbeKqaWyQYRjI5XJIpVLIZDLVBOiLFy/C0tISXC4Xb775JhITE5GQkIDa2lpUVVWhU6dOOo81Nna8QqHAF198AZFIhDNnzuh03baWn5+v89JsymnArq6uqpWOGlNdXY3CwkKNS6hp4uzsjKKiIp3K1FyFhYU6tQpau+4AW//k5GStj2+usrIyANB53p9EIsHWrVsRFRUFhmHQo0cPtUQohUKBr7/+Grdu3cLevXsRHh6O2bNna701nIeHB7Kzs3UqU3M8evRItaa1tlq77lwuFx4eHsjJyaGAqSdGGzDt7e1x7tw5jBw5Et999x2WLVvWYNDct28fcnNz8eqrr6pWt4iKisKRI0cwceJEiMVi1aLWdnZ29Vp4EokEUqkUVlZWMDMzQ1VVFQA2sDU0l4zL5are03V8pKHjGYbBxo0bkZeXhz///FPnJ8q2VlxcrHPWsTLt/YMPPtBpHE/boGFnZ4eSkhKdytRcJSUlOgWM1q47wNb/yZZLaxEKhTrtbyqTyXDs2DFERESoklymTZuGRYsWYdKkSarjGIbBlClTIBQKkZubi927dyMyMhLTp0/HggULmnxAsbW1bbKXSB+EQqHW//aGqjvAfo4aov4dhdEGTABwdHRETEwMRowYgSNHjmDWrFn1jrl58yYiIiLg6OiIV199FQD7nzc6OhocDgfTp0/Hhg0bsGbNGpw9exaffPJJvQ+n119/Hbdu3cLGjRublQCkDICaVrZZv3491q9fr9V19u7d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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "create_plot(tree)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "准确率： 0.2857142857142857\n"
     ]
    }
   ],
   "source": [
    "# 测试函数\n",
    "def test(tree, dataSet):\n",
    "    # 输入一个不包含标签的样本，返回预测值\n",
    "    def test_x(tree, x):\n",
    "        head = list(tree.keys())[0]\n",
    "        while True:\n",
    "            if isinstance(tree[head], dict):\n",
    "                tmp = tree[head]\n",
    "                tree = tmp[x[head]]\n",
    "                if isinstance(tree, dict):\n",
    "                    head = list(tree.keys())[0]\n",
    "                else:\n",
    "                    break\n",
    "            else:\n",
    "                break\n",
    "        return tree\n",
    "    \n",
    "    return np.array([test_x(tree, dataSet.iloc[i][:-1]) for i in range(len(dataSet))])\n",
    "\n",
    "def get_acc(y_pre, y_true):\n",
    "    from collections import Counter\n",
    "    return Counter(y_pre==y_true)[True]/len(y_pre)\n",
    "\n",
    "print(\"准确率：\", get_acc(test(tree, data_test), data_test.iloc[:,-1]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 剪枝处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'脐部': {'稍凹': {'触感': {'软粘': {'纹理': {'清晰': {'色泽': {'乌黑': '否', '青绿': '是'}},\n",
       "      '稍糊': '是'}},\n",
       "    '硬滑': '否'}},\n",
       "  '凹陷': {'色泽': {'乌黑': '是', '青绿': '是', '浅白': '否'}},\n",
       "  '平坦': '否'}}"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree = GenerateDecisionTree(data_train, data_train.columns[:-1], method='c4.5')\n",
    "tree"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 预剪枝"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 后剪枝"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Node(object):\n",
    "    \"\"\"节点类\"\"\"\n",
    "    def __init__(self, elem, lchild=None,mchild=None, rchild=None):\n",
    "        self.elem = elem\n",
    "        self.lchild = lchild\n",
    "        self.rchild = rchild\n",
    "        self.mchild = mchild\n",
    "\n",
    "\n",
    "class Tree(object):\n",
    "    \"\"\"树类\"\"\"\n",
    "    def __init__(self, root=None):\n",
    "        self.root = root\n",
    "\n",
    "\n",
    "\n",
    "def createDecisionTree(dataSet, attrs, method='c4.5'):\n",
    "            \n",
    "    # 生成结点node\n",
    "    node = Node(\"\",None, None)\n",
    "    \n",
    "    # 获取类\n",
    "    classes = dataSet.iloc[:,-1].value_counts().index\n",
    "    \n",
    "    # 类别数\n",
    "    k = len(dataSet.iloc[:,-1].value_counts())\n",
    "    \n",
    "    # 若数据集中只有一类样本，不划分，则返回其类\n",
    "    if k==1:\n",
    "        node.elem = \"label:%s\"%classes[0]\n",
    "        node.rchild = None\n",
    "        node.lchild = None\n",
    "        return node\n",
    "    \n",
    "    # 若当前属性集为空或所有样本在所有属性上的取值相同，不划分，返回样本数最多的类\n",
    "    if len(attrs)==0 or len(data.iloc[:,:-1].drop_duplicates())==1:\n",
    "        node.elem = \"label:%s\"%(dataSet.iloc[:,-1].value_counts().idxmax())\n",
    "        node.rchild = None\n",
    "        node.lchild = None\n",
    "        return \n",
    "        \n",
    "    \n",
    "    # 从属性集中选取最优属性\n",
    "    if method=='id3':\n",
    "        best_attr = info_gain(dataSet, attrs)\n",
    "    elif method=='c4.5':\n",
    "        best_attr, t = gain_ratio(dataSet, attrs)\n",
    "    elif method=='cart':\n",
    "        best_attr = gini_index(dataSet, attrs)\n",
    "    else:\n",
    "        print('method参数错误，备选方案：【id3, c4,5, cart】')\n",
    "        return\n",
    "\n",
    "    \n",
    "    # 对于每个属性生成分支\n",
    "    for a in dataSet[best_attr].value_counts().index:\n",
    "        d_v = dataSet[dataSet[best_attr]==a]\n",
    "        node_v = Node(\"\",None,None)\n",
    "        node_a = Node(\"value:%s\"%a)\n",
    "        node.elem = \"feature:%s\"%best_attr\n",
    "        if len(d_v)==0:\n",
    "            \n",
    "            node_v.elem = \"label:%s\"%dataSet.iloc[:,-1].value_counts().idxmax()\n",
    "            if node.lchild==None:\n",
    "                node_a.mchild = node_v\n",
    "                node.lchild = node_a\n",
    "            else:\n",
    "                node_a.mchild = node_v\n",
    "                node.rchild = node_v\n",
    "            return node\n",
    "        else:\n",
    "            new_attrs = attrs.drop(best_attr)\n",
    "            if node.lchild==None:\n",
    "                node_a.lchild = createDecisionTree(d_v, new_attrs, method=method)\n",
    "                node.lchild = node_a\n",
    "            elif node.mchild == None:\n",
    "                node_a.mchild = createDecisionTree(d_v, new_attrs, method=method)\n",
    "                node.mchild = node_a\n",
    "            else:\n",
    "                node_a.rchild = createDecisionTree(d_v, new_attrs, method=method)\n",
    "                node.rchild = node_a\n",
    "            #print(node)\n",
    "        \n",
    "    return node"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "T = Tree()\n",
    "T.root = createDecisionTree(data_train, data_train.columns[:-1],'id3')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{ root feature:色泽 } { l value:乌黑 } { l feature:脐部 } { l value:稍凹 } { l feature:纹理 } { l value:稍糊 } { l label:是 } { m value:清晰 } { m label:否 } { m value:凹陷 } { m label:是 } { m value:青绿 } { m feature:敲声 } { l value:浊响 } { l label:是 } { m value:沉闷 } { m label:否 } { r value:清脆 } { r label:否 } { r value:浅白 } { r label:否 } "
     ]
    }
   ],
   "source": [
    "# 前序遍历\n",
    "def preOrder(node, branch):\n",
    "    if node!=None:\n",
    "        print(\"{\",branch,node.elem,\"} \",end='')\n",
    "        preOrder(node.lchild, branch=\"l\")\n",
    "        preOrder(node.mchild, branch=\"m\")\n",
    "        preOrder(node.rchild, branch=\"r\")\n",
    "    \n",
    "    return\n",
    "\n",
    "# 中序遍历\n",
    "def inOrder(node, branch):\n",
    "    print(1)\n",
    "    if node != None:\n",
    "        inOrder(node.lchild, branch=\"l\")\n",
    "        #print(\"{\",branch,node.elem,\"} \",end='')\n",
    "        inOrder(node.mchild, branch=\"m\")\n",
    "        inOrder(node.rchild, branch=\"r\")\n",
    "    \n",
    "    return\n",
    "\n",
    "def findDepth(node):\n",
    "    if node == None:\n",
    "        return 0\n",
    "    else:\n",
    "        leftD = findDepth(node.lchild)\n",
    "        midD = findDepth(node.mchild)\n",
    "        rightD = findDepth(node.rchild)\n",
    "    \n",
    "    return max([leftD, midD, rightD]) + 1\n",
    "\n",
    "\n",
    "\n",
    "preOrder(T.root, 'root')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "228.306px"
   },
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
